// import com.alibaba.druid.sql.ast.SQLExpr;
// import com.alibaba.druid.sql.ast.SQLName;
// import com.alibaba.druid.sql.ast.SQLReplaceable;
// import com.alibaba.druid.sql.visitor.SQLASTVisitor;

#pragma once

#include <string>
#include <list>

#include "../SQLExpr.h"
#include "../SQLExprImpl.h"
#include "../Object.h"
#include "../SQLReplaceable.h"

#include "SQLConstraintImpl.h"
#include "SQLColumnConstraint.h"
class SQLASTVisitor;

class SQLColumnCheck 
: virtual public SQLConstraintImpl, 
virtual public SQLColumnConstraint, 
virtual public SQLReplaceable
{
public:
  SQLExpr_ptr expr;
  BOOL_ptr enforced;

  SQLColumnCheck();

  SQLColumnCheck(SQLExpr_ptr expr);
  SHAREDOBJECT(SQLColumnCheck);

  SQLExpr_ptr getExpr();

  void setExpr(SQLExpr_ptr expr);

  BOOL_ptr getEnforced();

  void setEnforced(BOOL_ptr enforced);

  void accept0(SQLASTVisitor_ptr visitor);

  // SQLColumnCheck *clone();
  virtual SQLObject_ptr clone();
  BOOL_ptr replace(SQLExpr_ptr expr, SQLExpr_ptr target);

  virtual bool containsAttribute(string_ptr name){};
  virtual void output(string_ptr buf){};
  virtual void addBeforeComment(string_list_ptr comments){};
  virtual string_list_ptr getBeforeCommentsDirect(){};
  virtual void addAfterComment(string_ptr  comment){};
  virtual void addAfterComment(string_list_ptr comments){};
  virtual string_list_ptr getAfterCommentsDirect(){};
  virtual bool hasBeforeComment(){};
  virtual bool hasAfterComment(){};
};
